import { message } from "antd";
import { extend, ResponseError, RequestOptionsInit } from "umi-request";

const codeMessage: any = {
  400: '请求出现错误',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '未找到接口',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

const errorHandler = function (error: ResponseError) {
  if (error.response) {
    message.error(codeMessage[error.response.status])
  } else {
    // 请求初始化时出错或者没有响应返回的异常
    console.log(error.message);
  }

  throw error; // 如果throw. 错误将继续抛出.

  // 如果return, 则将值作为返回. 'return;' 相当于return undefined, 在处理结果时判断response是否有值即可.
  // return {some: 'data'};

};
//全局请求参数设置
const request = extend({
  timeout: 30000,
  errorHandler,
  credentials: 'include'
})

// request拦截器, 改变url 或 options.
request.interceptors.request.use((url, options) => {
  console.log('options', options)
  const accessToken = localStorage.getItem('access_token') //sessionStorage.getItem('access_token');
  const authHeader: any = {};
  if (accessToken && !url.includes('/api-uaa/integrated-machine/login/polling')) {
    authHeader.Authorization = `Bearer ${accessToken}`;
  }
  const newHeaders = { ...options.headers, ...authHeader };
  return {
    url,
    options: { ...options, interceptors: true, headers: newHeaders },
  };
});

// 提前对响应做异常处理
request.interceptors.response.use(response => {
  return response;
});

// 克隆响应对象做解析处理
request.interceptors.response.use(async response => {
  const data = await response.clone().json();
  return response;
});

export default request